home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / DCLAP 6d / dclap6d / DNet / DGoPrefs.cpp < prev    next >
Text File  |  1996-07-05  |  21KB  |  723 lines

  1. // DGopherPrefs.cp
  2. // d.g.gilbert
  3.  
  4.  
  5.  
  6.  
  7. #include "DGoPrefs.h"
  8.  
  9. #include <ncbi.h>
  10. #include <dgg.h>
  11. #include <Dvibrant.h>
  12. #include <DApplication.h>
  13. #include <DGoDoc.h>
  14. #include <DGoNetDoc.h>
  15. #include <DGopher.h>
  16. //#include <DGoList.h>
  17. #include <DGoInit.h>
  18. //#include <DGoPlus.h>
  19. #include <DGoClasses.h>
  20. //#include <DPanel.h>
  21. #include <DControl.h>
  22. #include <DDialogText.h>
  23. #include <DWindow.h>
  24. #include <DMenu.h>
  25. #include <DFile.h>
  26. #include <DUtil.h>
  27. #include <DIconLib.h>  
  28. #include <stdio.h>
  29.  
  30.      // some public globals -- do these need to be public? -- yes to share w/ DGopherDoc
  31.      
  32. Global DGoviewPrefs* gGoviewPrefs = NULL;
  33. Global DGoOtherPrefs* gGoOtherPrefs = NULL;
  34.  
  35. Global    Boolean gShowKind = true, gShowPath = true, gShowHost = true, gShowPort = true, 
  36.                 gShowDate = true, gShowSize = true, gShowPlus = true, gShowAdmin = false, 
  37.                 gShowURL= false, gShowAbstract = true, gShowExtras = true, 
  38.                 gAllowLinkEdits = true, gWantFonts = false, gSameWindow = false;
  39.  
  40. Global Nlm_FonT gGoviewFont = NULL; //Nlm_programFont;
  41. Global short  gGoviewFontSize = 12;
  42. Global char    *gGoviewFontName = NULL;
  43. Global Nlm_Boolean gDoubleClicker = true;
  44. Global Nlm_Boolean gSingleClicker = false;
  45.  
  46.  
  47. #if 0
  48. Nlm_FonT     Nlm_GetFont PROTO((Nlm_CharPtr name, Nlm_Int2 size, Nlm_Boolean bld, Nlm_Boolean itlc, Nlm_Boolean undrln, Nlm_CharPtr fmly));
  49. Nlm_FonT     Nlm_ParseFont PROTO((Nlm_CharPtr spec));
  50. void         Nlm_SelectFont PROTO((Nlm_FonT f));
  51. Font Families that vibrant knows:
  52.         if (Nlm_StringICmp (fmly, "Roman") == 0) {
  53.         } else if (Nlm_StringICmp (fmly, "Swiss") == 0) {
  54.         } else if (Nlm_StringICmp (fmly, "Modern") == 0) {
  55.         } else if (Nlm_StringICmp (fmly, "Script") == 0) {
  56.         } else if (Nlm_StringICmp (fmly, "Decorative") == 0) {
  57. #endif
  58.  
  59.  
  60.  
  61.  
  62. //class DGoviewPrefs : public DWindow 
  63.  
  64.  
  65. enum DGoviewPrefCmds {
  66. cIfsz,cTfsz,cTtab,citem,cicoc,cicob,cIsi0,cIsi1,cIsi2,cicos,
  67. cIsz1,cIsz2,cIsz3,cattr,
  68. cDate,cSize,cKind,cPath,cHost,cPort,cURL,cAbstract,cAdmin,
  69. ccfnt,cIfnt,ctext,cTfnt
  70. };
  71.  
  72.  
  73. class DFontSizeControl : public DSwitchBox
  74. {
  75. public:
  76.     DGoviewPrefs*    fDoc;
  77.     
  78.     DFontSizeControl(long id, DView* super, DGoviewPrefs* itsDoc) :
  79.         DSwitchBox( id, super, true, true),
  80.         fDoc(itsDoc)
  81.         {
  82.         }
  83.         
  84.     virtual void Switch(short newval, short oldval)
  85.     {
  86.         switch (Id()) {
  87.             case cIfsz:
  88.                     gGoviewFontSize= newval;
  89.                     fDoc->fNeedSave= true;
  90.                     break;
  91.             case cTfsz:
  92.                     gTextFontSize= newval;
  93.                     fDoc->fNeedSave= true;
  94.                     break;
  95.             case cTtab:
  96.                     gTextTabStops= newval;
  97.                     fDoc->fNeedSave= true;
  98.                     break;
  99.             }
  100.     }
  101. };
  102.  
  103.  
  104.  
  105. DGoviewPrefs::DGoviewPrefs() :
  106.     DWindow( 0, NULL, DWindow::fixed, -10, -10, -50, -20, "View prefs", kDontFreeOnClose),
  107.     fGoFontMenu(NULL),
  108.     fTextFontMenu(NULL),
  109.     fNeedSave(false),
  110.     fItemGroup(NULL),
  111.     fTextGroup(NULL)
  112. {    
  113. }
  114.  
  115. DGoviewPrefs::~DGoviewPrefs()
  116. {
  117. }
  118.  
  119.  
  120. // static
  121. void DGoviewPrefs::InitGlobals() 
  122.     gGoviewFontName= gApplication->GetPref( "gGoviewFontName", "fonts", gGoviewFontName);
  123.     gGoviewFontSize= gApplication->GetPrefVal( "gGoviewFontSize", "fonts", "12");
  124.     gGoviewFont= Nlm_GetFont( gGoviewFontName, gGoviewFontSize, false, false, false, NULL);
  125.  
  126.     if (!gTextFont || !gTextFontName) {
  127.                 // DApplication::IApplication() now reads these ! 
  128.         gTextFontName= gApplication->GetPref( "gTextFontName", "fonts", gTextFontName);
  129.         gTextFontSize= gApplication->GetPrefVal( "gTextFontSize", "fonts", "12");
  130.         gTextTabStops= gApplication->GetPrefVal( "gTextTabStops", "fonts", "4");
  131.         gTextFont  = Nlm_GetFont( gTextFontName, gTextFontSize, false, false, false, NULL);
  132.         }
  133.     
  134.     gIconSize= gApplication->GetPrefVal( "gIconSize", "goview","2");
  135.     gShowDate= gApplication->GetPrefVal( "gShowDate", "goview","1");
  136.     gShowSize= gApplication->GetPrefVal( "gShowSize", "goview","1");
  137.     gShowKind= gApplication->GetPrefVal( "gShowKind", "goview");
  138.     gShowSize= gApplication->GetPrefVal( "gShowSize", "goview");
  139.     gShowPath= gApplication->GetPrefVal( "gShowPath", "goview");
  140.     gShowHost= gApplication->GetPrefVal( "gShowHost", "goview");
  141.     gShowPort= gApplication->GetPrefVal( "gShowPort", "goview");
  142.     gShowURL= gApplication->GetPrefVal( "gShowURL", "goview","0");
  143.     gShowAbstract= gApplication->GetPrefVal( "gShowAbstract", "goview","1");
  144.     gShowAdmin= gApplication->GetPrefVal( "gShowAdmin", "goview");
  145.     gShowExtras= (gShowURL||gShowDate||gShowSize||gShowHost||gShowPort
  146.                             ||gShowPath||gShowAdmin);
  147.  
  148. #ifndef NOTNOW_WIN_MOTIF
  149.     // gcc/motif bombs here w/ bus error
  150.     // deal with windowrect data also? -- gGopherListDocRect
  151.     {
  152.     char* srect = gApplication->GetPref( "gGopherListDocRect", "windows", "20 20 450 220");
  153.         // sscanf is failing on Mac/codewar !? used to work
  154. #if 1
  155.     if (srect) {
  156.         char* cp= srect;
  157.         while (*cp && isspace(*cp)) cp++;
  158.         gGopherListDocRect.left= atoi( cp);
  159.         
  160.         while (*cp && !isspace(*cp)) cp++;
  161.         while (*cp && isspace(*cp)) cp++;
  162.         gGopherListDocRect.top= atoi( cp);
  163.         
  164.         while (*cp && !isspace(*cp)) cp++;
  165.         while (*cp && isspace(*cp)) cp++;
  166.         gGopherListDocRect.right= atoi( cp);
  167.         
  168.         while (*cp && !isspace(*cp)) cp++;
  169.         while (*cp && isspace(*cp)) cp++;
  170.         gGopherListDocRect.bottom= atoi( cp);
  171.         }
  172. #else
  173.     if (srect) sscanf( srect, "%d%d%d%d", 
  174.                 &gGopherListDocRect.left, &gGopherListDocRect.top, 
  175.                 &gGopherListDocRect.right, &gGopherListDocRect.bottom);
  176. #endif
  177.     MemFree(srect);
  178.     }    
  179. #endif
  180. }
  181.  
  182. void DGoviewPrefs::SaveGlobals() 
  183. {
  184.  
  185. }
  186.  
  187. void DGoviewPrefs::Initialize() 
  188.     // InitGlobals(); // ??
  189.         
  190.                 // THIS dialog takes a while to build -- pre-make this dialog at startup??
  191.                 // build the dialog items now, before open, so we can keep a hidden window 
  192.                 // around all of applications life.
  193.                 
  194.     DView* super;
  195.     DEditText* et;
  196.     DPrompt* pr;
  197.     DCheckBox* ck;
  198.     DPopupList* popl;
  199.     DPopupMenu* popm;
  200.     DCluster * cluster, * subcluster;
  201.     DSwitchBox* sw;
  202.     
  203.         // dialog contents:
  204.         // top left -- cluster of 3 iconbuttons over 3 radio buttons, for icon size choice
  205.         // top right -- cluster of 3 rows x 2 cols of check boxes for show attributes
  206.         // bottom -- font popup, fontsize popup + edittext for item font
  207.  
  208.     fItemGroup= new DCluster(citem, this, 30, 10, false, "Item view");
  209.     super= fItemGroup;
  210.     
  211.         // top left -- cluster of 3 iconbuttons over 3 radio buttons, for icon size choice
  212.     
  213.     cluster= new DCluster(cicoc, super, 15, 5, true, NULL);
  214.     super= cluster;
  215.     if (gGopherIcons) {
  216.         DIcon* ico= NULL;
  217.         DIconButton* isize[3];
  218.         
  219.         subcluster= new DCluster(cicob, super, 15, 5, true, NULL);
  220.         super= subcluster;
  221.         
  222.         ico= gGopherIcons->IconById( kTextIcon+20000);  //tiny icon
  223.         isize[0]= new DIconButton(cIsi0, super, ico);
  224.         super->NextSubviewToRight();
  225.         ico= gGopherIcons->IconById( kTextIcon+10000);  //small icon
  226.         isize[1]= new DIconButton(cIsi1, super, ico);
  227.         super->NextSubviewToRight();
  228.         ico= gGopherIcons->IconById( kTextIcon);  //big icon
  229.         isize[2]= new DIconButton(cIsi2, super, ico);
  230.         
  231.         //isize[gIconSize]->SetStatus(true);
  232.         super= cluster;
  233.         super->NextSubviewBelowLeft();
  234.         }
  235.     
  236.     subcluster= new DCluster(cicos, super, 15, 5, true, NULL);
  237.     super= subcluster;
  238.     DRadioButton* rsize[3];
  239.     rsize[0]= new DRadioButton(cIsz1, super, NULL);
  240.     super->NextSubviewToRight();
  241.     rsize[1]= new DRadioButton(cIsz2, super, NULL);
  242.     super->NextSubviewToRight();
  243.     rsize[2]= new DRadioButton(cIsz3, super, NULL);
  244.     rsize[gIconSize]->SetStatus(true);
  245.     
  246.     
  247.         // top right -- cluster of 3 rows x 2 cols of check boxes for show attributes
  248.     super= fItemGroup;
  249.     super->NextSubviewToRight();
  250.     cluster= new DCluster(cattr, super, 15, 5, false, "Show attributes");
  251.     super= cluster;
  252.  
  253.     ck= new DCheckBox(cDate, super, "Date");
  254.     ck->SetStatus(gShowDate);
  255.     super->NextSubviewToRight();
  256.     ck= new DCheckBox(cSize, super, "Size");
  257.     ck->SetStatus(gShowSize);   
  258.     super->NextSubviewBelowLeft();
  259.  
  260.     ck= new DCheckBox(cKind, super, "Kind");
  261.     ck->SetStatus(gShowKind); 
  262.     super->NextSubviewToRight();
  263.     ck= new DCheckBox(cPath, super, "Path");
  264.     ck->SetStatus(gShowPath);   
  265.     super->NextSubviewBelowLeft();
  266.  
  267.     ck= new DCheckBox(cHost, super, "Host");
  268.     ck->SetStatus(gShowHost);
  269.     super->NextSubviewToRight();
  270.     ck= new DCheckBox(cPort, super, "Port");
  271.     ck->SetStatus(gShowPort);   
  272.     super->NextSubviewBelowLeft();
  273.  
  274.     ck= new DCheckBox(cURL, super, "URL");
  275.     ck->SetStatus(gShowURL);
  276.     super->NextSubviewToRight();
  277.     ck= new DCheckBox(cAbstract, super, "Abstract");
  278.     ck->SetStatus(gShowAbstract);   
  279.     super->NextSubviewBelowLeft();
  280.  
  281.     ck= new DCheckBox(cSize, super, "Admin");
  282.     ck->SetStatus(gShowAdmin);   
  283.     super->NextSubviewToRight();
  284.   // another check?
  285.     super->NextSubviewBelowLeft();
  286.     
  287.         // bottom -- font popup, fontsize popup + edittext for item font
  288.     super= fItemGroup;
  289.     super->NextSubviewBelowLeft();
  290.     cluster= new DCluster(ccfnt, super, 15, 5, true, NULL);
  291.     super= cluster;
  292.  
  293.     popm= new DPopupMenu(cIfnt, (Nlm_GrouP)super->GetNlmObject(), "Font  ");
  294.     fGoFontMenu= popm;
  295.     popm->AddFonts();
  296.     popm->SetFontChoice( gGoviewFontName); 
  297.     super->NextSubviewToRight();
  298.     
  299.     pr= new DPrompt(0, super, " font size", 0, 0, Nlm_programFont);             
  300.     super->NextSubviewToRight();
  301.     sw = new DFontSizeControl(cIfsz, super, this);
  302.     sw->SetValues(gGoviewFontSize,99);
  303.     
  304.     
  305.         // Text Group -- font, font size
  306.     super= this;
  307.     super->NextSubviewBelowLeft();
  308.  
  309.     fTextGroup= new DCluster(ctext, this, 30, 10, false, "Text view");
  310.     super= fTextGroup;
  311.  
  312.     popm= new DPopupMenu(cTfnt, (Nlm_GrouP)super->GetNlmObject(), "Font  ");
  313.     fTextFontMenu= popm;
  314.     popm->AddFonts();
  315.     popm->SetFontChoice( gTextFontName); 
  316.     super->NextSubviewToRight();
  317.     
  318.     cluster= new DCluster(0, super, 30, 10, true, NULL);
  319.     super= cluster;
  320.     
  321.     pr= new DPrompt(0, super, "font size", 0, 0, Nlm_programFont);             
  322.     super->NextSubviewToRight();
  323.     sw = new DFontSizeControl(cTfsz, super, this);
  324.     sw->SetValues(gTextFontSize,99);
  325.     super->NextSubviewBelowLeft();
  326.  
  327.     pr= new DPrompt(0, super, "tab stops", 0, 0, Nlm_programFont);             
  328.     super->NextSubviewToRight();
  329.     sw = new DFontSizeControl(cTtab, super, this);
  330.     sw->SetValues(gTextTabStops,99);
  331.  
  332.     super= fTextGroup;
  333.  
  334.     this->AddOkayCancelButtons();
  335.     
  336. }
  337.  
  338.  
  339. void DGoviewPrefs::OkayAction() 
  340.     // convert dialog control values to global values & app static/file prefs
  341.         
  342.     // font check not seen below...
  343.     
  344.     for (short imenu= 0; imenu<2; imenu++) {
  345.         short             aSize, nitem, i;
  346.         char            name[256];
  347.         DMenu     *    aMenu;
  348.         Nlm_FonT    aFont;
  349.         if (imenu) {
  350.             aMenu= fTextFontMenu; 
  351.             aSize= gTextFontSize;
  352.             }
  353.         else {
  354.             aMenu= fGoFontMenu; 
  355.             aSize= gGoviewFontSize;
  356.             }
  357.         if (aMenu && aMenu->GetFontChoice(name, 255)) {
  358.             if (StrCmp(name,"System")==0) aFont= Nlm_systemFont;
  359.             else if (StrCmp(name,"Program")==0) aFont= Nlm_programFont;
  360.             else aFont= Nlm_GetFont( name, aSize, false, false, false, NULL);
  361.             
  362.             if (aMenu == fGoFontMenu && StrCmp(name,gGoviewFontName)!=0 ) {
  363.                 if (gGoviewFontName) MemFree(gGoviewFontName);
  364.                 gGoviewFontName= StrDup(name);
  365.                 gGoviewFont= aFont;
  366.                 fNeedSave= true;
  367.                 }
  368.             else if (aMenu == fTextFontMenu &&  StrCmp(name,gTextFontName)!=0 ){
  369.                 if (gTextFontName) MemFree(gTextFontName);
  370.                 gTextFontName= StrDup(name);
  371.                 gTextFont= aFont;
  372.                 fNeedSave= true;
  373.                 }
  374.             }
  375.         }
  376.     
  377.         
  378.     DList* wins= gWindowManager->GetWindowList();
  379.     if (wins) {
  380.         long i, nwin= wins->GetSize();
  381.         for (i= 0; i<nwin; i++) {
  382.             DGopherListDoc* awin= (DGopherListDoc*) wins->At(i);
  383.             if (awin && awin->Id() == DGopherListDoc::kGoListdoc) {
  384.                 awin->fGoview->SetTableFont(gGoviewFont);
  385.                 awin->fGoview->SetColWidths();
  386.                 awin->fGoview->Invalidate();
  387.                 //awin->Erase(); awin->Show(); // why doesn't Invalidate() work ??
  388.                 }
  389.             }
  390.         }
  391.         
  392.  
  393.     if (fNeedSave) {
  394.         gApplication->SetPref( gGoviewFontName, "gGoviewFontName", "fonts");
  395.         gApplication->SetPref( gGoviewFontSize, "gGoviewFontSize", "fonts");
  396.         gApplication->SetPref( gTextFontName, "gTextFontName", "fonts");
  397.         gApplication->SetPref( gTextFontSize, "gTextFontSize", "fonts");
  398.         gApplication->SetPref( gTextTabStops, "gTextTabStops", "fonts");
  399.         
  400.         gApplication->SetPref( gIconSize, "gIconSize", "goview");
  401.         gApplication->SetPref( gShowDate, "gShowDate", "goview");
  402.         gApplication->SetPref( gShowSize, "gShowSize", "goview");
  403.         gApplication->SetPref( gShowKind, "gShowKind", "goview");
  404.         gApplication->SetPref( gShowPath, "gShowPath", "goview");
  405.         gApplication->SetPref( gShowHost, "gShowHost", "goview");
  406.         gApplication->SetPref( gShowPort, "gShowPort", "goview");
  407.         gApplication->SetPref( gShowURL, "gShowURL", "goview");
  408.         gApplication->SetPref( gShowAbstract, "gShowAbstract", "goview");
  409.         gApplication->SetPref( gShowAdmin, "gShowAdmin", "goview");
  410.  
  411.         fNeedSave= false;
  412.         }
  413. }
  414.  
  415.  
  416.  
  417. Boolean DGoviewPrefs::IsMyAction(DTaskMaster* action) 
  418. {    
  419.     DView*        aview= (DView*) action;
  420.     
  421.     switch(action->Id()) {
  422.             // these really should be done at OkayAction !??
  423.         case cicos: gIconSize= aview->GetValue() - 1; break;
  424.  
  425.         case cIsi0:
  426.         case cIsi1:
  427.         case cIsi2:
  428.             {
  429.             switch(action->Id()) {
  430.                 case cIsi0: gIconSize= 0; break;
  431.                 case cIsi1: gIconSize= 1; break;
  432.                 case cIsi2: gIconSize= 2; break;
  433.                 }
  434.             aview= fItemGroup->FindSubview(cicos);
  435.             if (aview) {
  436.                 aview->SetValue(gIconSize+1);
  437.                 aview->Invalidate();
  438.                 }
  439.             break; 
  440.             }
  441.             
  442.         case cDate: gShowDate= aview->GetStatus(); break;
  443.         case cSize: gShowSize= aview->GetStatus(); break;
  444.         case cKind: gShowKind= aview->GetStatus(); break;
  445.         case cPath: gShowPath= aview->GetStatus(); break;
  446.         case cHost: gShowHost= aview->GetStatus(); break;
  447.         case cPort: gShowPort= aview->GetStatus(); break;
  448.         case cURL: gShowURL= aview->GetStatus(); break;
  449.         case cAbstract: gShowAbstract= aview->GetStatus(); break;
  450.         case cAdmin: gShowAdmin= aview->GetStatus(); break;
  451.                                 
  452.         default : return DWindow::IsMyAction(action);    
  453.         }
  454.         
  455.     gShowExtras= (gShowURL||gShowDate||gShowSize||gShowHost||
  456.                                 gShowPort||gShowPath||gShowAdmin);
  457.     fNeedSave= true;
  458.     return true;
  459. }
  460.  
  461.  
  462. void DGoviewPrefs::Open()
  463. {
  464.     DWindow::Open();
  465. }
  466.  
  467.  
  468.  
  469.  
  470.  
  471. // class DGoOtherPrefs : public DWindow 
  472.  
  473.  
  474. enum GoOtherPrefsCmds {
  475.     kEditGopherMapHit = 4580,
  476.     kLocalRootHit, kLocalAskWaisHit,
  477.     kFetchSingles,
  478.     kClickerCluster,
  479.     kShortFolderCheck
  480.     };
  481.  
  482. DGoOtherPrefs::DGoOtherPrefs() :
  483.     DWindow( 0, NULL, DWindow::fixed, -10, -10, -50, -20, "Other prefs", kDontFreeOnClose),
  484.     fNeedSave(false),
  485.     fPlusGroup(NULL),
  486.     fMiscGroup(NULL),
  487.     fMapGroup(NULL),
  488.     fStartGroup(NULL),
  489.     fClickerGroup(NULL),
  490.     fNetGroup(NULL)
  491. {    
  492. }
  493.  
  494. DGoOtherPrefs::~DGoOtherPrefs()
  495. {
  496. }
  497.  
  498. void DGoOtherPrefs::OkayAction() 
  499.     // convert dialog control values to global values & app static/file prefs
  500.  
  501.     DCheckBox* ck;
  502.     ck= (DCheckBox*) this->FindSubview(kShortFolderCheck);
  503.     if (ck) gShortFolder= ck->GetStatus();
  504.  
  505.     //DGopherListDoc::gFetchSingles     
  506.     ck= (DCheckBox*) this->FindSubview(kFetchSingles);
  507.     if (ck) DGopherListDoc::gFetchSingles= ck->GetStatus();
  508.  
  509.     if (fClickerGroup) {
  510.         switch ( fClickerGroup->GetValue()) {
  511.             default:
  512.             case 1: gDoubleClicker= true; break;
  513.             case 2: gDoubleClicker= false; break;
  514.             }
  515.         gSingleClicker= ! gDoubleClicker;
  516.         }
  517. }
  518.  
  519. Boolean DGoOtherPrefs::IsMyAction(DTaskMaster* action) 
  520. {    
  521.     char* path;
  522.     switch(action->Id()) {
  523.         case kEditGopherMapHit: 
  524.             EditGopherMap(); //DGoInit.h
  525.             return true;
  526.     
  527.         case kLocalRootHit: 
  528.             // Really need a DFileManager:GetFolderName();
  529.             path= (char*) DFileManager::GetFolderName();
  530.             if (path) gLocalGopherRoot= StrDup( path);
  531.             return true;
  532.  
  533.         case kLocalAskWaisHit: 
  534.             path= (char*) DFileManager::GetInputFileName(NULL,"APPL");
  535.             if (path) {
  536.                 long len= StrLen(gLocalGopherRoot);
  537.                 if (StrNCmp( gLocalGopherRoot,path,len)==0) path += len;
  538.                 gAskWaisPath= StrDup( path);
  539.                 }
  540.             return true;
  541.              
  542.         }
  543.         
  544.     return DWindow::IsMyAction(action);    
  545. }
  546.  
  547.  
  548.  
  549. //static
  550. void DGoOtherPrefs::InitGlobals()
  551. {
  552.         // need to load in the user prefs & build prefs dialogs
  553.     char* onoffs;
  554.  
  555.     //gDoSuffix2MacMap= false; // !?? started bombing 26Dec94 w/ this != false
  556.  
  557.     onoffs= (DGopherListDoc::gFetchSingles) ? "1" : "0";
  558.     DGopherListDoc::gFetchSingles= gApplication->GetPrefVal("gFetchSingles","general", onoffs);
  559.     onoffs= (gShortFolder) ? "1" : "0";
  560.     gShortFolder= gApplication->GetPrefVal("gShortFolder","general", onoffs);
  561.     onoffs= (DGopherListDoc::gOptionIsOn) ? "1" : "0";
  562.     DGopherListDoc::gOptionIsOn= gApplication->GetPrefVal("gOptionIsOn","general", onoffs);
  563.     onoffs= (DGoLinkedTextDoc::gAutoloadInlines) ? "1" : "0";
  564.     DGoLinkedTextDoc::gAutoloadInlines= gApplication->GetPrefVal("gAutoloadInlines","general", onoffs);
  565.  
  566.     gLocalGopherRoot= gApplication->GetPref( "gLocalGopherRoot", "general", gLocalGopherRoot);
  567.     gAskWaisPath= gApplication->GetPref( "gAskWaisPath", "general", gAskWaisPath);
  568.  
  569.     onoffs= (gDoubleClicker) ? "1" : "0";
  570.     gDoubleClicker= gApplication->GetPrefVal("gDoubleClicker","general", onoffs);
  571.     gSingleClicker= ! gDoubleClicker;
  572.  
  573.  
  574. #ifndef NOTNOW_WIN_MOTIF
  575.     // gcc/motif bombs here w/ bus error
  576.     // deal with windowrect data also? -- gGopherListDocRect
  577.     {
  578.     char* srect = gApplication->GetPref( "gGopherListDocRect", "windows", "20 20 450 220");
  579.         // sscanf is failing on Mac/codewar !? used to work
  580. #if 1
  581.     if (srect) {
  582.         char* cp= srect;
  583.         while (*cp && isspace(*cp)) cp++;
  584.         gGopherListDocRect.left= atoi( cp);
  585.         
  586.         while (*cp && !isspace(*cp)) cp++;
  587.         while (*cp && isspace(*cp)) cp++;
  588.         gGopherListDocRect.top= atoi( cp);
  589.         
  590.         while (*cp && !isspace(*cp)) cp++;
  591.         while (*cp && isspace(*cp)) cp++;
  592.         gGopherListDocRect.right= atoi( cp);
  593.         
  594.         while (*cp && !isspace(*cp)) cp++;
  595.         while (*cp && isspace(*cp)) cp++;
  596.         gGopherListDocRect.bottom= atoi( cp);
  597.         }
  598. #else
  599.     if (srect) sscanf( srect, "%d%d%d%d", 
  600.                 &gGopherListDocRect.left, &gGopherListDocRect.top, 
  601.                 &gGopherListDocRect.right, &gGopherListDocRect.bottom);
  602. #endif
  603.     MemFree(srect);
  604.     }    
  605.  
  606.     {
  607.     char* srect = gApplication->GetPref( "gRichDocRect", "windows", "0 0 0 0");
  608.         // sscanf is failing on Mac/codewar !? used to work
  609.     if (srect) {
  610.         char* cp= srect;
  611.         while (*cp && isspace(*cp)) cp++;
  612.         DRichTextDoc::gRichDocRect.left= atoi( cp);
  613.         
  614.         while (*cp && !isspace(*cp)) cp++;
  615.         while (*cp && isspace(*cp)) cp++;
  616.         DRichTextDoc::gRichDocRect.top= atoi( cp);
  617.         
  618.         while (*cp && !isspace(*cp)) cp++;
  619.         while (*cp && isspace(*cp)) cp++;
  620.         DRichTextDoc::gRichDocRect.right= atoi( cp);
  621.         
  622.         while (*cp && !isspace(*cp)) cp++;
  623.         while (*cp && isspace(*cp)) cp++;
  624.         DRichTextDoc::gRichDocRect.bottom= atoi( cp);
  625.         }
  626.     MemFree(srect);
  627.     }    
  628. #endif
  629. }
  630.  
  631.  
  632. void DGoOtherPrefs::SaveGlobals()
  633. {
  634.     gApplication->SetPref( (int) gShortFolder,"gShortFolder","general");
  635.     gApplication->SetPref( (int) DGopherListDoc::gFetchSingles, "gFetchSingles","general");
  636.     gApplication->SetPref( (int) DGopherListDoc::gOptionIsOn,"gOptionIsOn","general");
  637.     gApplication->SetPref( (int) DGoLinkedTextDoc::gAutoloadInlines,"gAutoloadInlines","general");
  638.     gApplication->SetPref( gLocalGopherRoot,"gLocalGopherRoot","general");
  639.     gApplication->SetPref( gAskWaisPath,"gAskWaisPath","general");
  640.     gApplication->SetPref( (int) gDoubleClicker,"gDoubleClicker","general");
  641.  
  642.     if (!Nlm_EmptyRect(&gGopherListDocRect)) {
  643.         char  srect[128];
  644.         sprintf( srect, "%d %d %d %d", 
  645.                     gGopherListDocRect.left, gGopherListDocRect.top, 
  646.                     gGopherListDocRect.right, gGopherListDocRect.bottom);
  647.         gApplication->SetPref( srect, "gGopherListDocRect", "windows");
  648.         }
  649.         
  650.     if (!Nlm_EmptyRect(&DRichTextDoc::gRichDocRect)) {
  651.         char  srect[128];
  652.         sprintf( srect, "%d %d %d %d", 
  653.                     DRichTextDoc::gRichDocRect.left, DRichTextDoc::gRichDocRect.top, 
  654.                     DRichTextDoc::gRichDocRect.right, DRichTextDoc::gRichDocRect.bottom);
  655.         gApplication->SetPref( srect, "gRichDocRect", "windows");
  656.         }
  657. }
  658.  
  659. void DGoOtherPrefs::Initialize()
  660. {
  661.     DEditText* et;
  662.     DPrompt* pr;
  663.     DCheckBox* ck;
  664.     DPopupList* popl;
  665.     DPopupMenu* popm;
  666.     DButton* but;
  667.     DCluster* clu;
  668.     DRadioButton* rb;
  669.     Nlm_FonT    promptFont = Nlm_programFont;
  670.     DView* super = this;
  671.     char   buf[512];
  672.     
  673.         // dialog contents:
  674.  
  675.     ck= new DCheckBox(kShortFolderCheck,this,"Fetch brief gopher+ folders");
  676.     ck->SetStatus(gShortFolder);
  677.     //this->NextSubviewBelowLeft();
  678.     
  679.     ck= new DCheckBox(kFetchSingles,this,"auto-Fetch from folder with just one item");
  680.     ck->SetStatus(DGopherListDoc::gFetchSingles);
  681.  
  682.     this->NextSubviewBelowLeft();
  683.     
  684.     but= new DButton(kEditGopherMapHit,this,"Edit Gopher type handlers");
  685.     //this->NextSubviewBelowLeft();
  686.     
  687.     sprintf( buf, "Local services folder is '%s'", gLocalGopherRoot);
  688.     pr= new DPrompt(0, this, buf, 0, 0, promptFont);             
  689.     but= new DButton(kLocalRootHit,this,"Select local services folder");
  690.     //this->NextSubviewBelowLeft();
  691.  
  692.     sprintf(buf, "Local search app is '%s'", gAskWaisPath);
  693.     pr= new DPrompt(0, this, buf, 0, 0, promptFont);             
  694.     but= new DButton(kLocalAskWaisHit,this,"Select local search app");
  695.     
  696.     clu= new DCluster(kClickerCluster, super, 15, 5, false, "Mouse-clicks to fetch links");
  697.     fClickerGroup= clu;
  698.     super= clu;
  699.     rb= new DRadioButton( 0, super, "Double click");
  700.     rb->SetStatus(gDoubleClicker); 
  701.  
  702.     super->NextSubviewToRight();
  703.     rb= new DRadioButton( 0, super, "Single click");
  704.     rb->SetStatus(gSingleClicker);
  705.     super= this;
  706.  
  707.         //?? include a "Save prefs only on quit..." to save disk thrashing by saveprefs()
  708.     this->NextSubviewBelowLeft(); 
  709.     pr= new DPrompt(0, this, "Watch this space...", 0, 0, promptFont);             
  710.         
  711.     this->AddOkayCancelButtons();    
  712. }
  713.  
  714. void DGoOtherPrefs::Open()
  715. {
  716.     DWindow::Open();
  717. }
  718.  
  719.